//------------------------------------------------------------------------
//                              Keywords
//------------------------------------------------------------------------
/** @file Keywords.java
 *
 * Autores: Guillermo Garcia Juanes
 *          Jose Hernandez Gonzalez
 * Octubre de 2011
 *
 * Procesadores de Lenguajes
 * Practica 2
 *
 * Descripcion:
 *  Clase encargada de cargar en un StringBuffer las palabras reservadas,
 *  leidas desde fichero.
 */
package pl.equipo13.p2;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Vector;

public class Keywords {
   private Vector<String> KeywordString;
   private Map<String, Integer> ListKeys;
   
   /**
    * Constructor
    */
   public Keywords(){
	   KeywordString = new Vector<String>();
	   ListKeys = new HashMap<String, Integer>();
   }
   
   /**
    * ReadKeywords,
    * Establece las palabras reservadas de un lenguaje,
    * @param StringBuffer _Text, palabras reservadas
    */
   public void ReadKeywords(String _Text) {
      KeywordString.add(_Text);
 
   }
   
   /**
    * Prepara un informe sobre las palabras reservadas en un 
    * stringbuffer.
    * 
    * @return Stringbuffer, Informe sobre palabras reservadas
    */
   public StringBuffer Report(){
	   StringBuffer report = new StringBuffer("\n\n//---------- INFORME SOBRE PALABRAS RESERVADAS\n\n");
	   Iterator<Entry<String, Integer>> it = this.ListKeys.entrySet().iterator();
	   while (it.hasNext()) {
		   Map.Entry<String,Integer> e = (Map.Entry<String,Integer>)it.next();
		   report.append(e.getKey() + ": " + e.getValue().toString() + "\n");
	   }
	   return report;
   }
   
   /**
    * CheckKw,
    * Comprueba si la palabra que se envia es una palabra reservada
    * @param String Word, palabra a comprobar
    * @return int, devuelve -1 si no esta
    */
   public void CheckKw(String Word){
	  if(KeywordString.contains(Word)){
		  if(this.ListKeys.containsKey(Word)){
			  int aux = (Integer)this.ListKeys.get(Word).intValue();
			  this.ListKeys.remove(Word);
			  aux++;
			  this.ListKeys.put(Word, aux);
		  }else{
			  this.ListKeys.put(Word, 1);
		  }
	  }
   }
}
